package com.jch.dm.chapter_4_factory_method.framework;

/**
 * @author: jch
 * 工厂模式 示例程序
 **/
public abstract class Factory {

    /**
     * 产品工厂方法
     *
     * @param owner 所有者
     * @return 产品
     */
    public final Product create(String owner) {
        Product p = createProduct(owner);
        registerProduct(p);
        return p;
    }

    /**
     * 注册产品
     *
     * @param p 产品
     */
    protected abstract void registerProduct(Product p);

    /**
     * 创建Product
     *
     * @param owner 所有者
     * @return 类
     */
    protected abstract Product createProduct(String owner);
}
